package com.guchenbo.example.function;

import com.google.common.collect.Maps;

import java.util.concurrent.ConcurrentMap;
import java.util.function.Function;

/**
 * @Author guchenbo
 * @Date 2020/6/12.
 */
public class Test {

    public static void main(String[] args) {
        Test test = new Test();

        ConcurrentMap<String, Person> map = Maps.newConcurrentMap();
        // 先使用最匿名类
        map.computeIfAbsent("k1", new Function<String, Person>() {
            @Override
            public Person apply(String s) {
                // s是map的key=1，这个是创建key=1的value
                Person person = new Person("jay");
                System.out.printf("map的key=%s，对应的value=%s\n", s, person);
                return person;
            }
        });

        // 使用lambda
        map.computeIfAbsent("k2", s -> {
            Person person = new Person("green");
            System.out.printf("map的key=%s，对应的value=%s\n", s, person);
            return person;
        });

        // 使用lambda，并且我们把value的类型改成函数式
        ConcurrentMap<String, PersonFunction> map2 = Maps.newConcurrentMap();
        // 这里有两个函数式接口，
        // 第一个是computeIfAbsent的参数，用于创建map2的value
        // 第二个是map2的value，因为是一个函数式接口的类型
        PersonFunction pf = map2.computeIfAbsent("k1", s -> k -> k.toUpperCase());
        String bigName = pf.upperName("jim");
        System.out.println(bigName);

    }
}
